ImageCache と ImageProvider の変更
まとめ
ImageCache
というメソッドが追加されましたcontainsKey
。ImageProvider
サブクラスはオーバーライドしないでくださいresolve
、
しかし、代わりに新しいメソッドを実装する必要がありますImageProvider
。
これらの変更は、単一のコミットとしてフレームワークに送信されました。
変更内容の説明
以下のセクションでは、変更点について説明します。containsKey
とImageProvider
。
キー変更を含む
のクライアントImageCache
、カスタムなどImageProvider
、
キャッシュがすでに画像を追跡しているかどうかを知りたい場合があります。
を追加すると、containsKey
メソッドを使用すると、呼び出し元が発見できるようになります
これは次のようなメソッドを呼び出さずにputIfAbsent
、
望ましくない呼び出しを引き起こす可能性がありますImageProvider.load
。
デフォルトの実装では、保留中とキャッシュ済みの両方がチェックされます。 画像バケット。
bool containsKey(Object key) {
return _pendingImages[key] != null || _cache[key] != null;
}
画像プロバイダーの変更
のImageProvider.resolve
メソッドは複雑な処理を行います
通常はオーバーライドすべきではないエラー処理作業。
以前は、画像を
画像キャッシュ、経由ImageProvider.obtainKey
とImageProvider.load
。サブクラスには機会がなかった
オーバーライドせずにこの動作をオーバーライドしますresolve
、
そして作曲能力ImageProvider
は限られています
複数の場合ImageProvider
オーバーライドすることを期待していますresolve
。
この問題を解決するには、resolve
現在は非仮想としてマークされています。
そして 2 つの新しい保護されたメソッドが追加されました。createStream()
とresolveStreamForKey()
。
これらのメソッドを使用すると、サブクラスでほとんどの動作を制御できます。
のresolve
すべてのエラー処理作業を繰り返す必要はありません。
また、以下を構成するサブクラスも許可されます。ImageProvider
s
パブリック エントリポイントが 1 つだけであることをより確信するため
チェーンされたさまざまなプロバイダーに接続します。
移行ガイド
画像キャッシュの変更
移行前のコードには、containsKey
。
移行後のコード:
class MyImageCache implements ImageCache {
@override
bool containsKey(Object key) {
// Check if your custom cache is tracking this key.
}
...
}
画像プロバイダーの変更
移行前のコード:
class MyImageProvider extends ImageProvider<Object> {
@override
ImageStream resolve(ImageConfiguration configuration) {
// create stream
// set up error handling
// interact with ImageCache
// call obtainKey/load, etc.
}
...
}
移行後のコード:
class MyImageProvider extends ImageProvider<Object> {
@override
ImageStream createStream(ImageConfiguration configuration) {
// Return stream, or use super.createStream(),
// which returns a new ImageStream.
}
@override
void resolveStreamForKey(
ImageConfiguration configuration,
ImageStream stream,
Object key,
ImageErrorListener handleError,
) {
// Interact with the cache, use the key, potentially call `load`,
// and report any errors back through `handleError`.
}
...
}
タイムライン
リリースされたバージョン: 1.16.3
安定版リリース: 1.17
参考文献
API ドキュメント:
ImageCache
ImageProvider
ScrollAwareImageProvider
関連する問題:
- 問題 #32143
- 問題 #44510
- 問題 #48305
- 問題 #48775
関連する PR:
- 高速スクロールする場合は画像のデコードを延期します #49389